/**
 * Simple JavaScript Templating
 * John Resig - http://ejohn.org/ - MIT Licensed
 * @see http://ejohn.org/blog/javascript-micro-templating/
 */
(function(){
	if(!window.jo2) window.jo2 = {};

	var cache = {};
	/**
	 * evaluate template with data
	 * @param str
	 * @param data
	 */
	jo2.template = function(str, data){
		// Figure out if we're getting a template, or if we need to
		// load the template - and be sure to cache the result.
		var fn = !/\W/.test(str) ?
			cache[str] = cache[str] ||
				jo2.template(document.getElementById(str).innerHTML) :

			// Generate a reusable function that will serve as a template
			// generator (and which will be cached).
			new Function("obj",
				"var p=[],print=function(){p.push.apply(p,arguments);};" +
				
				// Introduce the data as local variables using with(){}
				"with(obj){p.push('" +
				
				// Convert the template into pure JavaScript
				str
					.replace(/[\r\t\n]/g, " ")
					.split("<%").join("\t")
					.replace(/((^|%>)[^\t]*)'/g, "$1\r")
					.replace(/\t=(.*?)%>/g, "',$1,'")
					.split("\t").join("');")
					.split("%>").join("p.push('")
					.split("\r").join("\\'")
			+ "');}return p.join('');");
		
		// Provide some basic currying to the user
		return data ? fn( data ) : fn;
	};

	/**
	 * HOW TO USE ?
	 *
	 * for example you could define your template like this :
	 * <script type="text/html" id="item_tmpl">
	 *     <div id="<%=id%>" class="<%=(i % 2 == 1 ? " even" : "")%>">
	 *         <div class="grid_1 alpha right">
	 *             <img class="righted" src="<%=profile_image_url%>"/>
	 *         </div>
	 *         <div class="grid_6 omega contents">
	 *             <p><b><a href="/<%=from_user%>"><%=from_user%></a>:</b> <%=text%></p>
	 *         </div>
	 *     </div>
	 * </script>
	 *
	 * you could also inline script :
	 * <script type="text/html" id="user_tmpl">
	 *     <% for ( var i = 0; i < users.length; i++ ) { %>
	 *         <li><a href="<%=users[i].url%>"><%=users[i].name%></a></li>
	 *     <% } %>
	 * </script>
	 *
	 * then :
	 * var results = document.getElementById("results");
	 * results.innerHTML = tmpl("item_tmpl", dataObject);
	 */

})();